/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.caelum.project.dao;

import br.com.caelum.project.hibernate.HibernateUtil;
import br.com.caelum.project.model.Produto;
import br.com.caelum.vraptor.ioc.Component;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author dyguilherme
 */
@Component
public class ProdutoDAO {

    private Session session;

    public ProdutoDAO() {
        //	this.session = new HibernateUtil().getSession();
        //this.session = session;
    }

    public void salva(Produto p) {
        this.session = new HibernateUtil().getSession();
        this.session.beginTransaction();
        this.session.save(p);
        this.session.getTransaction().commit();
        this.session.close();
    }

    public void remove(Produto p) {
        this.session = new HibernateUtil().getSession();
        this.session.beginTransaction();
        this.session.delete(p);
        this.session.getTransaction().commit();
        this.session.close();
    }

    public Produto procura(Long id) {
        this.session = new HibernateUtil().getSession();
        this.session.beginTransaction();
        Query query = this.session.createQuery("from Produto where id = :id");
        query.setParameter("id", id);
        Produto produto = (Produto) query.uniqueResult();
       // Produto produto = (Produto) this.session.load(Produto.class, id);
        this.session.close();
        return produto;
    }

    public void atualiza(Produto p) {
        this.session = new HibernateUtil().getSession();
        this.session.beginTransaction();
        this.session.update(p);
        this.session.getTransaction().commit();
        this.session.close();
    }

    public List<Produto> listaTudo() {
        List<Produto> produtos;
        this.session = new HibernateUtil().getSession();
        produtos = this.session.createCriteria(Produto.class).list();
        this.session.close();
        return produtos;
    }

    public List<Produto> pagina(int inicio, int quantia) {
        return this.session.createCriteria(Produto.class).setMaxResults(quantia).setFirstResult(inicio).list();
    }

    public List<Produto> precoMaiorQue(Double preco) {
        Query query = this.session.createQuery("from Produto where preco > :preco");
        query.setDouble("preco", preco);
        return query.list();
    }
}
